"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 21、用户身份保持：cookies.py
"""

"""
Cookie 是一些数据，存储于电脑上的文本文件中
当 web  服务端向浏览器发送 web 页面时，在连接关闭后，服务端不会记录用户的信息
"""
# 如果用例经常执行，复用浏览器不是一个好的选择（需要人工介入）
# cookies 的时效性很长，登录一次，多次使用

# ===================================     练习 获取 和 植入 cookie  ===========================================
"""
1、打开浏览器，扫码登录
2、确保登录成功后，通过 get_cookies 获取 cookie
3、检查本地文件是否获取成功
4、再次打开浏览器，通过 cookie 进入主页 
"""

# 注意：
"""
cookies 有互踢操作： 登录一次就行（在获取 cookie 成功之后，不要再进行扫码操作！！！）
获取cookie 时（执行 get_cookies 时）一定要确保是登录状态
植入 cookie 之后，需要进入登录页面。刷新验证是否 添加 cookie 成功
"""

import yaml
import time
from selenium import webdriver


class TestCookie:

    def setup_class(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)

    def teardown_class(self):
        self.driver.quit()

    # 获取 cookie
    def test_get_cookies(self):
        # 先保证登录状态
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame')
        # 等待 30s ，人工进行扫码操作
        time.sleep(30)
        # 等成功登录后，再获取cookie
        # ==============================  获取 cookie : driver.get_cookies()  ==========================================
        cookie = self.driver.get_cookies()
        # 数据持久化：把数据写入到文件中   （数据库/文件）
        with open('cookie.yaml', 'w', encoding='utf-8') as f:
            f.write(yaml.safe_dump(cookie))

    # 植入 cookie
    def test_add_cookie(self):
        # 1、访问企业微信主页面
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame#contacts')
        # 从文件中 读取 cookie
        cookies = yaml.safe_load(open('cookie.yaml'))
        # 2、植入 cookie
        # ============================   添加 cookie ： driver.add_cookie(cookie)  =====================================
        for cookie in cookies:
            self.driver.add_cookie(cookie)
        time.sleep(3)

        # 4、再次访问企业微信页面，不用扫码，自动登录
        self.driver.get('https://work.weixin.qq.com/wework_admin/frame#contacts')
